package com.xiaomazi.edu.service;

import com.xiaomazi.common.utils.R;
import com.xiaomazi.edu.dto.CourseInfoDTO;
import com.xiaomazi.edu.dto.CourseQuery;
import com.xiaomazi.edu.dto.front.CourseFrontDTO;
import com.xiaomazi.edu.entity.Course;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaomazi.servicebase.entity.CourseInfoToOrder;

public interface CourseService extends IService<Course>{
    /**
     * 添加课程
     * @return CourseResponse
     */
    R addCourseInfo(CourseInfoDTO courseInfoDTO);

    /**
     * 根据课程Id查询课程信息
     * @param courseId 课程id
     * @return CourseResult
     */
    R courseInfo(String courseId);

    /**
     * 根据课程Id修改课程信息
     * @param courseInfoDTO
     * @return
     */
    R uploadCourseInfo(CourseInfoDTO courseInfoDTO);

    /**
     * 根据课程id查询课程信息
     * @param id 课程id
     * @return courseVo
     */
    R publishCourseInfo(String id);

    /**
     * 根据课程Id修改课程状态为已发布状态
     * @param id 课程id
     * @return ok
     */
    R updateStatusById(String id);

    /**
     * 根据课程id删除课程 包括课程章节和小节和视频
     * @param id 课程id
     * @return ok
     */
    R removeCourseById(String id);

    /**
     * 根据课程条件筛选出课程并分页
     * @param courseQuery 课程条件
     * @return course
     */
    R pageCourseCondition(CourseQuery courseQuery);

    /**
     * 根据课程条件分页查询课程
     * @param courseFrontDTO 课程条件
     * @return 课程数据
     */
    R getCourseList(CourseFrontDTO courseFrontDTO);

    /**
     * 根据课程id查询课程信息
     * @param courseId 课程id
     * @return 课程数据 CourseInfoVo
     */
    R getCourseByCourseId(String courseId,String userId);

    /**
     * 根据课程ID查询出课程信息 供生成订单调用
     * @param courseId 课程id
     * @return CourseInfoToOrder
     */
    CourseInfoToOrder getCourseToOrderByCourseId(String courseId);
}
